home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok58 / nprint / txt / stringform.mod < prev    next >
Text File  |  1993-11-04  |  3KB  |  142 lines

  1. (**********************************************************************
  2.  
  3.     :Program.    StringForm.mod
  4.     :Contents.   string formatting procedures
  5.     :Author.     Nicolas Benezan [bne]
  6.     :Address.    Postwiesenstr. 2, D7000 Stuttgart 60
  7.     :Phone.      711/333679
  8.     :Copyright.  Public Domain
  9.     :Language.   Modula-2
  10.     :Translator. M2Amiga A+L V3.2d
  11.     :History.    V1.0a [bne] 11.May.1989
  12.  
  13. **********************************************************************)
  14.  
  15. IMPLEMENTATION MODULE StringForm;
  16.  
  17. FROM StringOps  IMPORT Length, DeleteSubString;
  18.  
  19. CONST
  20.   nul=CHR(0);
  21.   space=" ";
  22.  
  23. PROCEDURE AppendBlanks(VAR String:ARRAY OF CHAR;
  24.                            Width:INTEGER);
  25.   VAR
  26.     Pos,Max:INTEGER;
  27.   BEGIN
  28.     IF Width<=HIGH(String) THEN
  29.       Max:=Width-1;
  30.     ELSE
  31.       Max:=HIGH(String);
  32.     END;
  33.     Pos:=Length(String);
  34.     WHILE Pos<=Max DO
  35.       String[Pos]:=space;
  36.       INC(Pos);
  37.     END;
  38.     IF Pos<=HIGH(String) THEN
  39.       String[Pos]:=nul;
  40.     END;
  41.   END AppendBlanks;
  42.  
  43. PROCEDURE LeftInsertChar(VAR String:ARRAY OF CHAR;
  44.                              Char:CHAR;
  45.                              Num:INTEGER);
  46.   VAR
  47.     Pos,Max:INTEGER;
  48.   BEGIN
  49.     Max:=Length(String)-1+Num;
  50.     IF Max>HIGH(String) THEN
  51.       Max:=HIGH(String);
  52.     END;
  53.     FOR Pos:=Max-Num TO Num BY -1 DO
  54.       String[Max]:=String[Pos];
  55.       DEC(Max);
  56.     END;
  57.     DEC(Num);
  58.     IF Num<=HIGH(String) THEN
  59.       FOR Pos:=0 TO Num DO
  60.         String[Pos]:=Char;
  61.       END;
  62.     END;
  63.   END LeftInsertChar;
  64.  
  65. PROCEDURE Indent(VAR String:ARRAY OF CHAR;
  66.                      Margin:INTEGER);
  67.   BEGIN
  68.     LeftInsertChar(String,space,Margin);
  69.   END Indent;
  70.  
  71. PROCEDURE CenterAdjust(VAR String:ARRAY OF CHAR;
  72.                            Width:INTEGER);
  73.   VAR
  74.     Len:INTEGER;
  75.   BEGIN
  76.     Len:=Length(String);
  77.     IF Len<Width THEN
  78.       Indent(String,(Width-Length(String)) DIV 2);
  79.       AppendBlanks(String,Width);
  80.     END;
  81.   END CenterAdjust;
  82.  
  83. PROCEDURE CutBlanks(VAR String:ARRAY OF CHAR);
  84.   VAR
  85.     Pos:INTEGER;
  86.   BEGIN
  87.     Pos:=0;
  88.     WHILE (Pos<=HIGH(String)) AND (String[Pos]=space) DO
  89.       INC(Pos);
  90.     END;
  91.     DeleteSubString(String,0,Pos);
  92.     Pos:=Length(String)-1;
  93.     WHILE (Pos>=0) AND (String[Pos]=space) DO
  94.       DEC(Pos);
  95.     END;
  96.     INC(Pos);
  97.     IF Pos<=HIGH(String) THEN
  98.       String[Pos]:=nul;
  99.     END;
  100.   END CutBlanks;
  101.  
  102. PROCEDURE RightAdjust(VAR String:ARRAY OF CHAR;
  103.                           Width:INTEGER);
  104.   VAR
  105.     Len:INTEGER;
  106.   BEGIN
  107.     CutBlanks(String);
  108.     Len:=Length(String);
  109.     IF Len<Width THEN
  110.       Indent(String,Width-Len);
  111.     END;
  112.   END RightAdjust;
  113.  
  114. PROCEDURE EmptyString(String:ARRAY OF CHAR):BOOLEAN;
  115.   VAR
  116.     Pos:INTEGER;
  117.   BEGIN
  118.     FOR Pos:=0 TO HIGH(String) DO
  119.       IF String[Pos]=nul THEN
  120.         RETURN TRUE;
  121.       ELSIF String[Pos]#space THEN
  122.         RETURN FALSE;
  123.       END;
  124.     END;
  125.     RETURN TRUE;
  126.   END EmptyString;
  127.  
  128. PROCEDURE LeftInsertZeroes(VAR String:ARRAY OF CHAR;
  129.                                Width:INTEGER);
  130.   VAR
  131.     Len:INTEGER;
  132.   BEGIN
  133.     CutBlanks(String);
  134.     Len:=Length(String);
  135.     IF Len<Width THEN
  136.       LeftInsertChar(String,"0",Width-Len);
  137.     END;
  138.   END LeftInsertZeroes;
  139.  
  140. END StringForm.
  141.  
  142.